package com.nd.android.u.ui.beanStarApp;

import ims.IMSdkEntry;
import ims.cmd.PersonNotifyCmd;
import android.app.Notification;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.ImageView;

import com.common.allCommon.StarAppHeadImageLoader;
import com.common.android.utils.smiley.Smiley;
import com.common.android.utils.smiley.Smileyhelper;
import com.nd.android.u.allCommonUtils.LogUtils;
import com.nd.android.u.business.db.table.UserMessageTable;
import com.nd.android.u.chatInterfaceImpl.ChatInterfaceImpl;
import com.nd.android.u.commonWidget.NotificationMsg;
import com.nd.android.u.controller.ChatConst.KEY;
import com.nd.android.u.controller.ChatConst.MessageContentType;
import com.nd.android.u.controller.ChatGlobalVariable;
import com.nd.android.u.controller.MessageConst.DbOperationCmd;
import com.nd.android.u.controller.MessageConst.MessageState;
import com.nd.android.u.controller.MessageConst.ServerMessageType;
import com.nd.android.u.controller.bean.message.BaseDisplayMessage_Person;
import com.nd.android.u.controller.observer.MessageDispatcher;
import com.nd.android.u.ui.ChatEntry;
import com.nd.android.u.ui.R;
import com.product.android.business.ApplicationVariable;
import com.product.android.commonInterface.chat.ErpInfo;

/**
 * 个人消息展示类，有些UI相关的操作要在这里进行
 * <br>Created 2014-10-30 上午11:05:54
 * @version  
 * @author   cb		
 * @see 	 
 */
public class DisplayMessage_Person extends BaseDisplayMessage_Person{

	/**ERP消息*/
	public ErpInfo erpInfo;
	
	@Override
    public void showNotify() {
    	if (ChatGlobalVariable.getInstance().noNeedNotify(this)){
            //不需要显示通知
            return;     
        }
        Context context = IMSdkEntry.INSTANCE.context;
        // 在通知栏上面显示“xxx发来一条新消息”
        String flashText = "";
        String name = "";
        boolean showPop=true;
        if (uidFrom == ChatInterfaceImpl.INSTANCE.chatCallOtherModel.getOapUid()) {
            // 自己发的消息不提醒(正常情况下自己发的消息是调不到这个类，目前唯一的例外是自己在其它端上传了共享文件，为避免还有其它例外，在此统一处理）
            flashText = context.getString(R.string.notify_me);
            showPop=false;
        } else {
            name = ChatInterfaceImpl.INSTANCE.chatCallOtherModel.getUserName(uidFrom);
            flashText = context.getString(R.string.notify_other, name);
        }
        if (uidFrom == ChatInterfaceImpl.INSTANCE.chatCallOtherModel.getOapUid()) {
            // 自己发的消息不提醒(正常情况下自己发的消息是调不到这个类，目前唯一的例外是自己在其它端上传了共享文件，为避免还有其它例外，在此统一处理）
            showPop=false;
        } 
        // 显示通知的具体内容（为消息的文本）
        String tipText = Smileyhelper.getInstance().showSmileyByTip(displayContent, Smiley.TYPE_CHAT);

        // 设置剩余多少条未读消息
        String title = getUnreadMessage();
        // 设置点击后跳转的目标
        Intent notifyIntent = new Intent();
        notifyIntent.setClass(context,getDisplayClass());
        Bundle bundle = new Bundle();
        bundle.putLong(KEY.FID, getFriendId());
        bundle.putLong(KEY.GENERAL_ID, getFriendId());
        bundle.putInt(KEY.MESSAGE_TYPE, messageType);
        bundle.putString(KEY.NAME, name);
        notifyIntent.putExtras(bundle);
        
        // 生成通知
        Notification notification = NotificationMsg.getInstance().obtainNotify(flashText, title, tipText,
                notifyIntent);
        // 显示通知
        NotificationMsg.getInstance().showNotify(notification, this,  showPop, bundle);
    }

	@Override
	public String getThumbnailUrl() {
	      return url;
	}
	@Override
	public boolean prepareMessage() {
		if (erpInfo!=null){
			//erp消息在刚收到的时候才进入此分支
			return proccessErp();
		}else{
			if (messageContentType==ServerMessageType.MSG_APP_XML){
	            erpInfo=new ErpInfo();
	            erpInfo.parseFromJson(oriMessage);
	            displayContent=erpInfo.content;
	        }
	        if (displayContent == null) {
	        	ChatInterfaceImpl.INSTANCE.messageAnalyser.analyseMessage(this);
	        	if (messageContentType==PersonNotifyCmd.MSG_A2A_AUTO_REPLY){
	    			//自动回复的消息，只显示在界面上，不写数据库
	    			return true;
	    		}
	        }
		}
		return false;
	}
	
	/**
	 * 处理erp消息
	 * <br>Created 2014-7-27 下午6:51:09
	 * @return boolean
	 * @author       cb
	*/
	private boolean proccessErp(){
		//创建一个新的个人消息对象，并把bussinessId放到新消息的generateid变量里，而不是使用系统生成的generateid
		String erpId=erpInfo.bussinessId;
		DisplayMessage_Person message=new DisplayMessage_Person();
		message.generateId=erpId;
		if (dbOperation.getByCmd(message, DbOperationCmd.GET_BY_BUSSID)){
			//该BUSSID的ERP消息已在数据库里，覆盖旧数据
			generateId=message.generateId;
			erpInfo.generateId=generateId;
			if (!dbOperation.update(this)){
				LogUtils.e("debug", "update erpmessage fail:"+message.erpInfo.tasktitle+","+message.erpInfo.taskId);
			}else{
				//更新数据成功，发通知
				showNotify();
				MessageDispatcher.getInstance().notifyMessageStateChanged(this, MessageState.ERP_UPDATE);
			}
			return true;
		}
		return false;
	}
	
	@Override
	public void clickPortrait(boolean isMyPortrait, Context context) {
		if (isMyPortrait) {
			ChatEntry.INSTANCE.chatCallOtherModel_UI
					.gotoPersonalDynamicActivity(context,
							ApplicationVariable.INSTANCE.getUapUid());
		} else {
			ChatEntry.INSTANCE.chatCallOtherModel_UI.gotoPersonalDynamicActivity(
					context, uidFrom);
		}
	}
	
	@Override
	public ContentValues convertToContentValues() {
		ContentValues contentValues = super.convertToContentValues();
		if (messageContentType == ServerMessageType.MSG_APP_XML) {
			// 保存数据库的时候要把erp消息打包成json串，并保存bussinessid
			if (erpInfo != null) {
				oriMessage = erpInfo.packToJson();
				contentValues.put(UserMessageTable.FIELD20_ERPID, erpInfo.bussinessId);
			}
		} else {
			if (TextUtils.isEmpty(oriMessage)
					&& (messageContentType == MessageContentType.PICTURE || messageContentType == MessageContentType.TEXT)) {
				// 消息的orimessage为null,消息类型为图片或者文本，说明是本地发送的消息，要把消息进行打包成服务端能够识别的格式
				oriMessage = ChatInterfaceImpl.INSTANCE.messageAnalyser.packMsg(this);
			}
		}
		contentValues.put(UserMessageTable.COMM_FIELD7_MESSAGE, oriMessage);
		return contentValues;
	}

	@Override
	public void displayPortrait(ImageView img, boolean isMyPortrait) {
		if (isMyPortrait) {
//			StarAppHeadImageLoader.displayCircleImage(
//					ChatInterfaceImpl.INSTANCE.chatCallOtherModel.getOapUid(),
//					StarAppHeadImageLoader.IMAGE_TYPE_HEAD_100, img, null);
			StarAppHeadImageLoader.displayCircleImageByUid(//FIDS 私聊头像改造
					ApplicationVariable.INSTANCE.applicationContext,
					ChatInterfaceImpl.INSTANCE.chatCallOtherModel.getOapUid(),
					StarAppHeadImageLoader.IMAGE_TYPE_HEAD_100, img, null, -1,
					-1);
		} else {
//			StarAppHeadImageLoader.displayCircleImage(getFriendId(),
//					StarAppHeadImageLoader.IMAGE_TYPE_HEAD_100, img, null);
			StarAppHeadImageLoader.displayCircleImageByUid(
					ApplicationVariable.INSTANCE.applicationContext,
					getFriendId(), StarAppHeadImageLoader.IMAGE_TYPE_HEAD_100,
					img, null, -1, -1);
		}

	}
	
	
}
